package licode.unisop.single.user.application.gateway;

import licode.unisop.provider.info.*;
import licode.unisop.provider.vo.SiPageResult;
import licode.unisop.provider.vo.SiRealmPlatform;
import licode.unisop.provider.vo.SiUserGroup;
import licode.unisop.single.user.application.entity.RealmPlatGroupEntity;
import licode.unisop.single.user.infrastructure.repository.po.RealmPlatGroupPO;

import java.io.Serializable;
import java.util.List;

/**
 * uni-user-single
 *
 * @author licode
 * @date 2016-04-11 10:58:29
 */
public interface RealmPlatGroupDao {
    void add(RealmPlatGroupEntity item);
    void update(RealmPlatGroupEntity item);
    void removeWithId(Serializable id);
    RealmPlatGroupEntity getWithId(Serializable id);

    void clearGroupsOfPlatform(String platformId);
    void saveGroupsOfPlatform(SiUserGroupsAssignToPlatIn req);
    void assignGroupToPlatform(SiUserGroupsAssignToPlatIn req);

    long getGroupCountToPlatform(UserGroupRemoveFromPlatIn req);
    void removeGroupFromPlatform(UserGroupRemoveFromPlatIn req);

    void removePlatsFromGroup(SiPlatsAssignToUserGroupIn req);
    void assignPlatsToUserGroup(SiPlatsAssignToUserGroupIn req);

    RealmPlatGroupPO findFirstGroupOfPlatform(String platformId);
    List<SiUserGroup> findAssignGroup(UserGroupQueryIn req);
    SiPageResult<SiRealmPlatform> findRealPlatform(SiRealmAssignPlatPageIn req);
    List<SiRealmPlatform> findRealPlatformOther(SiRealmPlatformOtherIn req);
}
